// 定义包名,指定代码所在的包路径
package com.example.myapplication8.ui.settings

// 导入需要使用的类
import android.os.Bundle // 用于传递数据
import android.view.LayoutInflater // 用于加载布局
import android.view.View // 视图基类
import android.view.ViewGroup // 视图组基类
import android.widget.AdapterView // 适配器视图基类,用于下拉列表
import android.widget.ArrayAdapter // 数组适配器,用于绑定数据到下拉列表
import androidx.fragment.app.Fragment // Fragment基类
import androidx.lifecycle.ViewModelProvider // ViewModel提供者
import com.example.myapplication8.R // 资源文件
import com.example.myapplication8.databinding.FragmentSettingsBinding // 视图绑定类

// 设置Fragment类,继承自Fragment
class SettingsFragment : Fragment() {

    // 使用视图绑定,_binding可为空
    private var _binding: FragmentSettingsBinding? = null
    // binding属性代理,保证非空访问
    private val binding get() = _binding!!
    // 声明ViewModel,延迟初始化
    private lateinit var settingsViewModel: SettingsViewModel

    // 重写onCreateView方法,创建Fragment视图
    override fun onCreateView(
        inflater: LayoutInflater, // 布局加载器
        container: ViewGroup?, // 父容器
        savedInstanceState: Bundle? // 保存的状态
    ): View {
        // 初始化ViewModel
        settingsViewModel = ViewModelProvider(this).get(SettingsViewModel::class.java)
        // 加载布局文件
        _binding = FragmentSettingsBinding.inflate(inflater, container, false)
        
        // 初始化各项设置
        setupNotificationSettings() // 设置通知
        setupThemeSettings() // 设置主题
        setupLanguageSettings() // 设置语言
        
        // 返回根视图
        return binding.root
    }

    // 设置通知开关
    private fun setupNotificationSettings() {
        // 观察通知开关状态变化
        settingsViewModel.notificationsEnabled.observe(viewLifecycleOwner) { enabled ->
            binding.switchNotifications.isChecked = enabled
        }

        // 设置开关状态改变监听器
        binding.switchNotifications.setOnCheckedChangeListener { _, isChecked ->
            settingsViewModel.updateNotificationSettings(isChecked)
        }
    }

    // 设置主题
    private fun setupThemeSettings() {
        // 观察主题设置变化
        settingsViewModel.currentTheme.observe(viewLifecycleOwner) { theme ->
            // 根据主题值选择对应的单选按钮
            val radioButton = when (theme) {
                SettingsViewModel.THEME_LIGHT -> binding.radioLight // 浅色主题
                SettingsViewModel.THEME_DARK -> binding.radioDark // 深色主题
                else -> binding.radioSystem // 跟随系统
            }
            radioButton.isChecked = true
        }

        // 设置单选按钮组选择改变监听器
        binding.radioGroupTheme.setOnCheckedChangeListener { _, checkedId ->
            // 根据选中的按钮ID设置主题
            val theme = when (checkedId) {
                R.id.radio_light -> SettingsViewModel.THEME_LIGHT
                R.id.radio_dark -> SettingsViewModel.THEME_DARK
                else -> SettingsViewModel.THEME_SYSTEM
            }
            settingsViewModel.updateTheme(theme)
        }
    }

    // 设置语言
    private fun setupLanguageSettings() {
        // 定义支持的语言列表
        val languages = arrayOf("简体中文", "English", "日本語", "한국어")
        // 创建语言选择器适配器
        val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, languages)
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        binding.spinnerLanguage.adapter = adapter

        // 观察当前语言设置
        settingsViewModel.currentLanguage.observe(viewLifecycleOwner) { language ->
            // 根据语言代码设置选择器位置
            val position = when (language) {
                "zh" -> 0 // 中文
                "en" -> 1 // 英文
                "ja" -> 2 // 日文
                "ko" -> 3 // 韩文
                else -> 0 // 默认中文
            }
            binding.spinnerLanguage.setSelection(position)
        }

        // 设置语言选择器监听器
        binding.spinnerLanguage.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            // 选择语言时触发
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                // 根据选择位置设置语言代码
                val language = when (position) {
                    0 -> "zh"
                    1 -> "en" 
                    2 -> "ja"
                    3 -> "ko"
                    else -> "zh"
                }
                settingsViewModel.updateLanguage(language)
            }

            // 未选择时的处理
            override fun onNothingSelected(parent: AdapterView<*>?) {
                // 不做任何操作
            }
        }
    }

    // 销毁视图时清理binding,避免内存泄漏
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}